package com.resource;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ResourceDemo {

	public void myTest() {
		Properties properties = new Properties();
		InputStream in;
		try {
			System.out.println(this.getClass().getResource(""));// 相对路径
			System.out.println(this.getClass().getResource("/"));// 绝对路径
			// in = new BufferedInputStream (new
			// FileInputStream("WebRoot/WEB-INF/classes/test2.properties"));
			/*
			 * n = getClass().getResourceAsStream("/test2.properties") 和下面效果一样
			 * 一个是绝对路径 一个是相对路径应用 /开头表明是绝对路径 这个地方的相对路径所依据参考路径 就是classpath所在目录
			 * 也就是CLASS这目录 加了 /就表明拿到这个绝对路径 所以就是CLASSPATH 不加/就表明是相对
			 * 自然需要../../向上升级目录了 这种../../ 方式就可以定位到各个位子的资源了
			 */
			// in = getClass().getResourceAsStream("../../test2.properties");
			System.out.println(getClass().getClassLoader().getResource(""));

			// 这样访问不了 不明白原因 硬盘直接使用是可以执行的
			// 找到原因了 目前的JDK提供的ClassLoader类的getResource(String
			// 相对路径)方法，只能接受一般的相对路径。这样，使用ClassLoader类的getResource(String
			// 相对路径)方法就只能定位到classpath下的资源
			// in =
			// getClass().getClassLoader().getResourceAsStream("../../../../test2.properties");

			// 拿CLASSpath目录外的文件方式
			System.out.println(new File(this.getClass().getResource("")
					.getFile(), "../../../../test2.properties")
					.getCanonicalFile());

			in = new FileInputStream(new File(this.getClass().getResource("")
					.getFile(), "../../../../test2.properties"));

			properties.load(in);
			// File f = new File("test");
			// System.out.println("fs"+f.getAbsolutePath());
			System.out.println(System.getProperty("user.dir"));

			System.out.println(properties.getProperty("jdbc.driverClassName"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public static void main(String[] args) {
		ResourceDemo d = new ResourceDemo();
		d.myTest();
	}

}
